using System;
using System.Collections.Generic;
using System.Data;
using SearchServer.Exceptions;
using Persistencia;

namespace SearchServer.AppManager
{

	public class VideoManager {

        private VideoInstitucionalPersistence _videoInstitucionalPersistence;

        /// <summary>
        /// 
        /// </summary>
		public VideoManager(){

            _videoInstitucionalPersistence = new VideoInstitucionalPersistence();

		}

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public static VideoManager GetInstancia()
        {

            return new VideoManager();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="nombre"></param>
        /// <param name="path"></param>
        /// <param name="idUsuario"></param>
		public void AgregarVideo(String nombre, String path, int idUsuario){
            try
            {
                TimeMgr.ITimeMgr mgr = new TimeMgr.TimeMgr();
                VideoInstitucional video = new VideoInstitucional();
                video.Nombre = nombre;
                video.Path = path;
                video.Activo = true;
                video.Usuario_Creacion = idUsuario;
                video.Fecha_Creacion = mgr.ObtenerFecha();
                video.Fecha_Ultima_Modificacion = mgr.ObtenerFecha();
                _videoInstitucionalPersistence.InsertarVideo(video);
            }
            catch (DataException ex)
            {
                throw new BusinessException(BusinessException.ERROR_BD);
            }
		}

	    /// <summary>
	    /// 
	    /// </summary>
	    /// <param name="idVideo"></param>
	    /// <param name="idUsuario"></param>
	    public void EliminarVideo(int idVideo, int idUsuario)
        {
            try
            {
                _videoInstitucionalPersistence.EliminarVideo(idVideo,idUsuario);
            }
            catch (DataException)
            {
                throw new BusinessException(BusinessException.ERROR_BD);
            }
		}

	    /// <summary>
	    /// 
	    /// </summary>
	    /// <param name="idVideo"></param>
	    /// <param name="nombre"></param>
	    /// <param name="path"></param>
	    /// <param name="idUsuario"></param>
	    /// <param name="activo"></param>
	    public void ModificarVideo(int idVideo, String nombre, String path, int idUsuario, bool activo){
            try
            {
                _videoInstitucionalPersistence.ModificarVideo(idVideo, nombre, path, idUsuario, activo);
                
            }
            catch (DataException)
            {
                throw new BusinessException(BusinessException.ERROR_BD);
            }
		}

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
		public List<VideoInstitucional> ObtenerVideos(){
            try
            {
                List<VideoInstitucional> videos =_videoInstitucionalPersistence.ObtenerVideos();
                return videos;                
            }
            catch (DataException)
            {
                throw new BusinessException(BusinessException.ERROR_BD);
            }
		}

        /// <summary>
        /// 
        /// </summary>
        /// <param name="idVideo"></param>
        /// <returns></returns>
        public VideoInstitucional ObtenerVideo(int idVideo)
        {
            try
            {
                VideoInstitucional video = _videoInstitucionalPersistence.ObtenerVideo(idVideo);
                return video;
            }
            catch (DataException)
            {
                throw new BusinessException(BusinessException.ERROR_BD);
            }
        }

	    /// <summary>
	    /// Activa un video que se marco como eliminado previamente
	    /// </summary>
	    /// <param name="idVideo"></param>
	    /// <param name="p"></param>
	    /// <param name="userId"></param>
	    internal void ActivarVideo(int idVideo, int userId)
        {
            try
            {
                _videoInstitucionalPersistence.ActivarVideo(idVideo, userId);
            }
            catch (DataException)
            {
                throw new BusinessException(BusinessException.ERROR_BD);
            }
        }
    }

}